package UI;
import Crt.KundeCtr;
import java.util.Scanner;

/**
 * Write a description of class KundeUI here.
 * 
 * @author (Gruppe 5) 
 * @version (a version number or a date)
 */
public class KundeUI
{
    private KundeCtr kCtr;
    
    /**
     * KundeUI Constructor
     *
     */
    public KundeUI()
    {
        kCtr = new KundeCtr();
    }
    
    /**
     * Method start
     *
     */
    public void start()
    {
        kundeMenu();
    }
    
    /**
     * Method kundeMenu
     *
     * Methoden Starter den valgte methode du ønsker at bruge
     * ved hjælp af nummer du angiver.
     */
    public void kundeMenu()
    {   
        boolean exit = false;
        while(!exit)
        {
            //show menu and return the user's choise
            int choice = writeKundeMenu();
            if (choice == 1)
            {
                createKunde();
            }
            else
            {
                if(choice == 2)
                {
                    removeKunde();
                }
                else
                {
                    if(choice == 3)
                    {
                        findKunde();
                    }
                    else
                    {
                        if(choice == 4)
                        {
                            listAll();
                        }
                        else
                        {
                            exit = true;
                        }//end else
                    }
                }
            }
        }//end while
    }
    
    /**
     * Method writeKundeMenu
     *
     * @return The return value
     * 
     * Methoden viser frem hvad du kan vælge på skærmen.
     */
    private int writeKundeMenu()
    {
           // creates an object keyboard to read data from the keyboard
            Scanner keyboard = new Scanner(System.in);
            System.out.println("\f *** Vare Menu ***");
            System.out.println(" (1) Opret ny Kunde");
            System.out.println(" (2) Slet Kunde");
            System.out.println(" (3) Find kunde");
            System.out.println(" (4) Vis alle kunder");
            System.out.println(" (5) Tilbage");
            System.out.print("\n Make your choice: ");
            
            int choice = keyboard.nextInt();
            return choice;
    }
    
    /**
     * Method inputKundeID
     *
     * @return The return value
     * 
     * Methoden læser den angivene input du har skrevet
     * og tjekker om du kan tilføje den eller om den er null.
     * 
     * Alle input gør det samme men nogle af som inputKundeID
     * stopper også bogstaver så du kun kan skrive tal.
     */
    public int inputKundeID()
    {   
        boolean ok = false;
        int kID = 0;
        String test = null;
        while(!ok)
        {
           // makes an object keyboard to have input from the console
           Scanner keyboard = new Scanner(System.in);
           System.out.println(" Skriv KundeID:  ");
           try
           {
             test = keyboard.nextLine();
             kID = Integer.parseInt(test);
             ok = true;
           }
           catch (Exception e)
            {
             System.out.println("Du skal skrive et tal -  prøv igen");
           }
        }//end while
        return kID;
    }
    
    public String inputNavn()
    {
        String navn = null;
        boolean ok = false;
        
        while(!ok)
        {
           // makes an object keyboard to have input from the console
           Scanner keyboard = new Scanner(System.in);
           System.out.println(" Skriv Navn:  ");
           navn = keyboard.nextLine();
           
           if(navn.matches("[a-åA-Å]+$"))
           {
             ok = true;
           }
           else
           {
             System.out.println("Du skal skrive et navn -  prøv igen");
           }
        }//end while
         return navn;
    }
    
    public String inputAdresse()
    {
        String adresse = null;
        boolean ok = false;
        
        while(!ok)
        {
           // makes an object keyboard to have input from the console
           Scanner keyboard = new Scanner(System.in);
           System.out.println(" Skriv Adresse:  ");
           adresse = keyboard.nextLine();
           
           if(!adresse.equals(""))
           {
             ok = true;
           }
           else
           {
             System.out.println("Du skal skrive en adresse -  prøv igen");
           }
        }//end while
         return adresse;
    }
    
    public String inputTelefon()
    {
        String telefon = null;
        boolean ok = false;
        
        while(!ok)
        {
           // makes an object keyboard to have input from the console
           Scanner keyboard = new Scanner(System.in);
           System.out.println(" Skriv Telefon nummer:  ");
           telefon = keyboard.nextLine();
           
           if(!telefon.equals(""))
           {
             ok = true;
           }
           else
           {
             System.out.println("Du skal skrive et telefon nummer -  prøv igen");
           }
        }//end while
         return telefon;
    }
    
    public int inputPostNr()
    {   
        boolean ok = false;
        int postNr = 0;
        String test = null;
        while(!ok)
        {
           // makes an object keyboard to have input from the console
           Scanner keyboard = new Scanner(System.in);
           System.out.println(" Skriv PostNr:  ");
           try
           {
             test = keyboard.nextLine();
             postNr = Integer.parseInt(test);
             ok = true;
           }
           catch (Exception e)
            {
             System.out.println("Du skal skrive et postNr -  prøv igen");
           }
        }//end while
        return postNr;
    }
    
    public String inputBy()
    {
        String by = null;
        boolean ok = false;
        
        while(!ok)
        {
           // makes an object keyboard to have input from the console
           Scanner keyboard = new Scanner(System.in);
           System.out.println(" Skriv By:  ");
           by = keyboard.nextLine();
           
           if(by.matches("[a-åA-Å]+$"))
           {
             ok = true;
           }
           else
           {
             System.out.println("Du skal skrive en by -  prøv igen");
           }
        }//end while
         return by;
    }
    
    public String inputMail()
    {
        String mail = null;
        boolean ok = false;
        
        while(!ok)
        {
           // makes an object keyboard to have input from the console
           Scanner keyboard = new Scanner(System.in);
           System.out.println(" Skriv Mail:  ");
           mail = keyboard.nextLine();
           
           if(!mail.equals(""))
           {
             ok = true;
           }
           else
           {
             System.out.println("Du skal skrive en Mail -  prøv igen");
           }
        }//end while
         return mail;
    }
    
    /**
     * Method exit
     *
     * Methoden retunere dig til den tidliger menu.
     */
    public void exit()
    {
        System.out.println("\n Press Enter to return");
        
        Scanner button = new Scanner(System.in);
        boolean ok = false;
        while(!ok)
        {
            String theButton = button.nextLine();
            ok = true;
        }
    }
    
    /**
     * Method createKunde
     *
     * Methoden bruger de angivne info til at lave en ny
     * kunden og tilføjer den til KundeContainer.
     */
    private void createKunde()
    {
        int kID = inputKundeID();
        String navn = inputNavn();
        String adresse = inputAdresse();
        String telefon = inputTelefon();
        int postNr = inputPostNr();
        String by = inputBy();
        String mail = inputMail();
        
        kCtr.createKunde(kID, navn, adresse, telefon, postNr, by, mail);
    }
    
    /**
     * Method removeKunde
     *
     *
     * Methoden tjekker der en kunden med det angivne id
     * og sletter den og skriver en besked ud, hvis der 
     * ikke er en kunde med det angivne id skriver den en
     * besked er siger der ikke er nogen med det id.
     */
    private void removeKunde()
    {
        int kID = inputKundeID();
        
        if(kCtr.removeKunde(kID))
        {
            System.out.println("Kunden er Slettet");
        }
        else
        {
            System.out.println("Der er ingen kunde med det ID: " + kID);
        }
        
        exit();
    }
    
    /**
     * Method findKunde
     *
     * Methoden bruger det angivne id til at finde en kunde
     * og udskriver deres info, finder den ikke nogen skriver
     * den at der ikke er nogen med det id.
     */
    private void findKunde()
    {
        int kID = inputKundeID();
        
        if(kCtr.findKunde(kID) != null)
        {
            System.out.println("ID: " + kCtr.findKunde(kID).getID());
            System.out.println("navn: " + kCtr.findKunde(kID).getNavn());
            System.out.println("Adresse: " + kCtr.findKunde(kID).getAdresse());
            System.out.println("Telefon: " + kCtr.findKunde(kID).getTelefon());
            System.out.println("PostNr: " + kCtr.findKunde(kID).getPostNr());
            System.out.println("By: " + kCtr.findKunde(kID).getBy());
            System.out.println("Mail: " + kCtr.findKunde(kID).getMail());
        }
        else
        {
            System.out.println("Der er ingen kunde med det ID: " + kID);
        }
        
        exit();
    }
    
    /**
     * Method listAll
     *
     * Methode viser alle kunder der er.
     */
    private void listAll()
    {
        for(int index = 0; index < kCtr.listAll().size(); index++)
        {
            System.out.println("ID: " + kCtr.getKunde(index).getID());
            System.out.println("navn: " + kCtr.getKunde(index).getNavn());
            System.out.println("Adresse: " + kCtr.getKunde(index).getAdresse());
            System.out.println("Telefon: " + kCtr.getKunde(index).getTelefon());
            System.out.println("PostNr: " + kCtr.getKunde(index).getPostNr());
            System.out.println("By: " + kCtr.getKunde(index).getBy());
            System.out.println("Mail: " + kCtr.getKunde(index).getMail());
            System.out.println("");
        }
        
        exit();
    }
}
